package com.ophiux.cs.domain.consult.model.aggregate;

import com.ophiux.cs.domain.consult.model.entity.CSUser;
import com.ophiux.cs.domain.consult.model.entity.CSUserLoginRecords;
import com.ophiux.cs.domain.consult.model.valueobj.CSUserLoginResult;
import com.ophiux.cs.domain.core.Aggregate;

/**
 * 用户信息  聚合跟
 * @author chenh
 *
 */
public class CSUserInfo extends Aggregate{

	private CSUser csUser;	//用户基本资料
	
	private CSUserLoginRecords lastLoginRecord;	//最近一次登录记录
	
	private CSUserLoginRecords curLoginRecord;	//本次登录信息

	public CSUser getCsUser() {
		return csUser;
	}

	public void setCsUser(CSUser csUser) {
		this.csUser = csUser;
	}

	public CSUserLoginRecords getLastLoginRecord() {
		return lastLoginRecord;
	}

	public void setLastLoginRecord(CSUserLoginRecords lastLoginRecord) {
		this.lastLoginRecord = lastLoginRecord;
	}

	public CSUserLoginRecords getCurLoginRecord() {
		return curLoginRecord;
	}

	public void setCurLoginRecord(CSUserLoginRecords curLoginRecord) {
		this.curLoginRecord = curLoginRecord;
	}
	
	/**
	 * 判断用户是否在线
	 * true:在线   false:离线
	 * @return
	 */
	public boolean isOnline() {
		return this.getCurLoginRecord().isOnline();
	}
	
	/**
	 * 登录
	 * @param platform  登录平台
	 * @param password  登录密码
	 * @return
	 */
	public CSUserLoginResult login(String platform , String password) {
		
		//验证登录信息
		CSUserLoginResult loginResult = this.loginValid(password);
		
		//验证失败，直接返回
		if(!loginResult.isValidResult()) return loginResult;
		
		//验证成功，继续执行登录业务
		//1.对上一次的登录记录做退出（当前在线，变为上一次）
		if(this.getCurLoginRecord() != null 
				&& this.getLastLoginRecord().isOnline()) {
			//当前在线，将当前登录信息变为上一次登录信息
			CSUserLoginRecords lastLoginRecord = this.getCurLoginRecord();
			lastLoginRecord.logout();//对当前登录做退出处理
		}
		
		//新增本次登录信息
		String targetID = this.getCsUser().getTARGET_ID();
		
		CSUserLoginRecords loginRecord = 
				new CSUserLoginRecords(targetID, platform);
		//登录
		loginRecord.login();
		this.setCurLoginRecord(loginRecord);
		
		return loginResult;
	}
	
	/**
	 * 咨询用户登录验证
	 * @return
	 */
	private CSUserLoginResult loginValid(String password) {
		
		if(this.csUser == null)
			//该账号不存在
			return CSUserLoginResult.fail("", "输入的账号不存在，请确认账号是否已注册");
		//账号有效性判断
		if(!this.csUser.isValid()) 
			//账号无效
			return CSUserLoginResult.fail("", "输入的账号已停用");
		//验证密码是否正确
		if(!this.csUser.validPassword(password))
			return CSUserLoginResult.fail("", "输入的账号和密码不匹配");
		
		//否则，验证通过
		return CSUserLoginResult.success();
	}
	
}
